home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume24 / gnucalc / part01 next >
Encoding:
Text File  |  1991-10-28  |  56.8 KB  |  1,532 lines

  1. Newsgroups: comp.sources.misc
  2. From: daveg@synaptics.com (David Gillespie)
  3. Subject:  v24i049:  gnucalc - GNU Emacs Calculator, v2.00, Part01/56
  4. Message-ID: <csm-v24i049=gnucalc.220632@sparky.IMD.Sterling.COM>
  5. X-Md4-Signature: 52c1eac59d2e502ce40037027fd67942
  6. Date: Tue, 29 Oct 1991 04:08:29 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: daveg@synaptics.com (David Gillespie)
  10. Posting-number: Volume 24, Issue 49
  11. Archive-name: gnucalc/part01
  12. Environment: Emacs
  13. Supersedes: gmcalc: Volume 13, Issue 27-45
  14.  
  15. The following postings contain version 2.00 of Calc, the symbolic
  16. calculator for GNU Emacs.  This is a complete re-posting, not a patch.
  17. Many things have changed since version 1.07; in particular, the
  18. installation procedure is all new.  Be sure to read the file "INSTALL"
  19. for the necessary instructions.
  20.  
  21. Calc is written entirely in Emacs Lisp, so it should run on any machine
  22. that runs GNU Emacs, and you don't need to recompile Emacs to use it.
  23. The Calc Manual is in "texinfo" format, which can be formatted for
  24. on-line documentation and can also be printed with TeX.  The manual
  25. includes a tutorial with exercises and answers, a reference section,
  26. and a complete summary of commands.
  27.  
  28. Calc can do both numeric computations and symbolic algebra.  It has
  29. a variety of mathematical functions which can be evaluated to arbitrary
  30. precision on the complex plane.  It can operate on vectors and matrices,
  31. and can also do arithmetic with fractions, dates and times, intervals,
  32. and error forms with standard deviations.  Unit conversions are provided
  33. with a large variety of built-in units.  Many common functions from
  34. business, statistics, programming, and number theory are included.
  35. Algebraic facilities include factoring polynomials, finding derivatives
  36. and integrals, solving systems of equations, and pattern-based rewriting
  37. of equations.  Formulas can be copied to and from editing buffers in
  38. many formats, including C, FORTRAN, TeX, and Mathematica.  Calc can use
  39. GNUPLOT to graph formulas and data.
  40.  
  41. Calc is distributed free under the GNU General Public License.  It
  42. is also available for FTP from csvax.cs.caltech.edu.  Comments are
  43. welcome to daveg@synaptics.com, or daveg@csvax.cs.caltech.edu.
  44.  
  45. Enjoy!
  46.                                 -- Dave
  47.  
  48. ---- Cut Here and unpack ----
  49. #!/bin/sh
  50. # This is a shell archive (produced by shar 3.49)
  51. # To extract the files from this archive, save it to a file, remove
  52. # everything above the "!/bin/sh" line above, and type "sh file_name".
  53. #
  54. # existing files will NOT be overwritten unless -c is specified
  55. #
  56. # This is part 1 of a multipart archive                                    
  57. # do not concatenate these parts, unpack them in order with /bin/sh        
  58. #
  59. # This shar contains:
  60. # length  mode       name
  61. # ------ ---------- ------------------------------------------
  62. #  17492 -rw-r--r-- INSTALL
  63. #   4630 -rw-r--r-- Makefile
  64. #   3706 -rw-r--r-- README
  65. # 112529 -rw-r--r-- calc.el
  66. #  28616 -rw-r--r-- calc-aent.el
  67. # 108099 -rw-r--r-- calc-alg-2.el
  68. #  56657 -rw-r--r-- calc-alg-3.el
  69. #  53736 -rw-r--r-- calc-alg.el
  70. #  86526 -rw-r--r-- calc-arith.el
  71. #  24864 -rw-r--r-- calc-bin.el
  72. #  33469 -rw-r--r-- calc-comb.el
  73. #  54712 -rw-r--r-- calc-comp.el
  74. #  10186 -rw-r--r-- calc-cplx.el
  75. #  41524 -rw-r--r-- calc-embed.el
  76. # 118802 -rw-r--r-- calc-ext.el
  77. #  12610 -rw-r--r-- calc-fin.el
  78. #  51626 -rw-r--r-- calc-forms.el
  79. #   6304 -rw-r--r-- calc-frac.el
  80. #  30406 -rw-r--r-- calc-funcs.el
  81. #  47114 -rw-r--r-- calc-graph.el
  82. #  22452 -rw-r--r-- calc-help.el
  83. #   7165 -rw-r--r-- calc-incom.el
  84. #  22155 -rw-r--r-- calc-keypd.el
  85. #  36543 -rw-r--r-- calc-lang.el
  86. #   6182 -rw-r--r-- calc-macs.el
  87. #  12652 -rw-r--r-- calc-maint.el
  88. #  39224 -rw-r--r-- calc-map.el
  89. #  10372 -rw-r--r-- calc-mat.el
  90. #  52594 -rw-r--r-- calc-math.el
  91. #  24690 -rw-r--r-- calc-misc.el
  92. #  19361 -rw-r--r-- calc-mode.el
  93. #  35651 -rw-r--r-- calc-poly.el
  94. #  60998 -rw-r--r-- calc-prog.el
  95. #  69210 -rw-r--r-- calc-rewr.el
  96. #  17425 -rw-r--r-- calc-rules.el
  97. #   9143 -rw-r--r-- calc-sel-2.el
  98. #  25519 -rw-r--r-- calc-sel.el
  99. #  18079 -rw-r--r-- calc-stat.el
  100. #  18912 -rw-r--r-- calc-store.el
  101. #   9150 -rw-r--r-- calc-stuff.el
  102. #   4845 -rw-r--r-- calc-trail.el
  103. #   4666 -rw-r--r-- calc-undo.el
  104. #  46113 -rw-r--r-- calc-vec.el
  105. #  41220 -rw-r--r-- calc-units.el
  106. #  17330 -rw-r--r-- calc-yank.el
  107. #  22571 -rw-r--r-- macedit.el
  108. # 1420611 -rw-r--r-- calc.texinfo
  109. #
  110. if test -r _shar_seq_.tmp; then
  111.     echo 'Must unpack archives in sequence!'
  112.     echo Please unpack part `cat _shar_seq_.tmp` next
  113.     exit 1
  114. fi
  115. # ============= INSTALL ==============
  116. if test -f 'INSTALL' -a X"$1" != X"-c"; then
  117.     echo 'x - skipping INSTALL (File already exists)'
  118.     rm -f _shar_wnt_.tmp
  119. else
  120. > _shar_wnt_.tmp
  121. echo 'x - extracting INSTALL (Text)'
  122. sed 's/^X//' << 'SHAR_EOF' > 'INSTALL' &&
  123. X
  124. Installation
  125. ************
  126. X
  127. Calc 2.00 comes as a set of GNU Emacs Lisp files, with names like
  128. `calc.el' and `calc-ext.el', and also as a `calc.texinfo' file which
  129. can be used to generate both on-line and printed documentation.
  130. X
  131. X   To install Calc, just follow these simple steps.  If you want more
  132. information, each step is discussed at length in the sections below.
  133. X
  134. X  1. Change (`cd') to the Calc "home" directory.  This directory was
  135. X     created when you unbundled the Calc `.tar' or `.shar' file.
  136. X
  137. X  2. Type `make' to install Calc privately for your own use, or type
  138. X     `make install' to install Calc system-wide.  This will compile all
  139. X     the Calc component files, modify your `.emacs' or the system-wide
  140. X     `lisp/default' file to install Calc as appropriate, and format
  141. X     the on-line Calc manual.
  142. X
  143. X     Both variants are shorthand for the following three steps:
  144. X
  145. X        * `make compile' to run the byte-compiler.
  146. X
  147. X        * `make private' or `make public', corresponding to `make' and
  148. X          `make install', respectively.  (If `make public' fails
  149. X          because your system doesn't already have a `default' or
  150. X          `default.el' file, use Emacs or the Unix `touch' command to
  151. X          create a zero-sized one first.)
  152. X
  153. X        * `make info' to format the on-line Calc manual.  This first
  154. X          tries to use the `makeinfo' program; if that program is not
  155. X          present, it uses the Emacs `texinfo-format-buffer' command
  156. X          instead.
  157. X
  158. X          The Unix `make' utility looks in the file `Makefile' in the
  159. X     current directory to see what Unix commands correspond to the
  160. X     various "targets" like `install' or `public'.  If your system
  161. X     doesn't have `make', you will have to examine the `Makefile' and
  162. X     type in the corresponding commands by hand.
  163. X
  164. X  3. If you ever move Calc to a new home directory, just give the
  165. X     `make private' or `make public' command again in the new
  166. X     directory.
  167. X
  168. X  4. Test your installation as described at the end of these
  169. X     instructions.
  170. X
  171. X  5. (Optional.)  To print a hardcopy of the Calc manual (over 500
  172. X     pages) or just the Calc Summary (about 20 pages), follow the
  173. X     instructions under "Printed Documentation" below.
  174. X
  175. Calc is now installed and ready to go!
  176. X
  177. X
  178. Upgrading from Calc 1.07
  179. =========================
  180. X
  181. If you have Calc version 1.07 or earlier, you will find that Calc 2.00
  182. is organized quite differently.  For one, Calc 2.00 is now distributed
  183. already split into many parts; formerly this was done as part of the
  184. installation procedure.  Also, some new functions must be autoloaded
  185. and the `M-#' key must be bound to `calc-dispatch' instead of to
  186. `calc'.
  187. X
  188. X   The easiest way to upgrade is to delete your old Calc files and then
  189. install Calc 2.00 from scratch using the above instructions.  You
  190. should then go into your `.emacs' or `default' file and remove the old
  191. `autoload' and `global-set-key' commands for Calc, since `make
  192. public'/`make private' has added new, better ones.
  193. X
  194. X   *Note New for Calc 2.00::, for more information about what has
  195. changed since version 1.07.
  196. X
  197. X
  198. The `make public' Command
  199. ==========================
  200. X
  201. X   If you are not the regular Emacs administrator on your system, your
  202. account may not be allowed to execute the `make public' command, since
  203. the system-wide `default' file may be write-protected.  If this is the
  204. case, you will have to ask your Emacs installer to execute this
  205. command.  (Just `cd' to the Calc home directory and type `make
  206. public'.)
  207. X
  208. X   The `make private' command adds exactly the same set of commands to
  209. your `.emacs' file as `make public' adds to `default'.  If your Emacs
  210. installer is concerned about typing this command out of the blue, you
  211. can ask her/him instead to copy the necessary text from your `.emacs'
  212. file.  (They will be marked by a comment that says "Commands added by
  213. `calc-private-autoloads' on (date and time).")
  214. X
  215. X
  216. Compilation
  217. ============
  218. X
  219. Calc is written in a way that maximizes performance when its code has
  220. been byte-compiled; a side effect is that performance is seriously
  221. degraded if it *isn't* compiled.  Thus, it is essential to compile the
  222. Calculator before trying to use it.  The function `calc-compile' in
  223. the file `calc-maint.el' runs the Emacs byte-compiler on all the Calc
  224. source files.  (Specifically, it runs `M-x byte-compile-file' on all
  225. files in the current directory with names of the form `calc*.el', and
  226. also on the file `macedit.el'.)
  227. X
  228. X   If `calc-compile' finds that certain files have already been
  229. compiled and have not been changed since, then it will not bother to
  230. recompile those files.
  231. X
  232. X   The `calc-compile' command also pre-builds certain tables, such as
  233. the units table (see "The Units Table") and the built-in rewrite
  234. rules (see "Rearranging with Selections") which Calc would otherwise
  235. need to rebuild every time those features were used.
  236. X
  237. X   The `make compile' shell command is simply a convenient way to
  238. start an Emacs and give it a `calc-compile' command.
  239. X
  240. X
  241. Auto-loading
  242. =============
  243. X
  244. To teach Emacs how to load in Calc when you type `M-#' for the first
  245. time, add these lines to your `.emacs' file (if you are installing
  246. Calc just for your own use), or the system's `lisp/default' file (if
  247. you are installing Calc publicly).  The `make private' and `make
  248. public' commands, respectively, take care of this.  (Note that `make'
  249. runs `make private', and `make install' runs `make public'.)
  250. X
  251. X     (autoload 'calc-dispatch          "calc" "Calculator Options" t)
  252. X     (autoload 'full-calc              "calc" "Full-screen Calculator" t)
  253. X     (autoload 'full-calc-keypad       "calc" "Full-screen X Calculator" t)
  254. X     (autoload 'calc-eval              "calc" "Use Calculator from Lisp")
  255. X     (autoload 'defmath                "calc" nil t t)
  256. X     (autoload 'calc                   "calc" "Calculator Mode" t)
  257. X     (autoload 'quick-calc             "calc" "Quick Calculator" t)
  258. X     (autoload 'calc-keypad            "calc" "X windows Calculator" t)
  259. X     (autoload 'calc-embedded          "calc" "Use Calc from any buffer" t)
  260. X     (autoload 'calc-embedded-activate "calc" "Activate =>'s in buffer" t)
  261. X     (autoload 'calc-grab-region       "calc" "Grab region of Calc data" t)
  262. X     (autoload 'calc-grab-rectangle    "calc" "Grab rectangle of data" t)
  263. X
  264. X   Unless you have installed the Calc files in Emacs' main `lisp/'
  265. directory, you will also have to add a command that looks like the
  266. following to tell Emacs where to find them.  In this example, we have
  267. put the files in directory `/usr/gnu/src/calc-2.00'.
  268. X
  269. X     (setq load-path (append load-path (list "/usr/gnu/src/calc-2.00")))
  270. X
  271. The `make public' and `make private' commands also do this (they use
  272. the then-current directory as the name to add to the path).  If you
  273. move Calc to a new location, just repeat the `make public' or `make
  274. private' command to have this new location added to the `load-path'.
  275. X
  276. X   The `autoload' command for `calc-dispatch' is what loads `calc.elc'
  277. when you type `M-#'.  It is the only `autoload' that is absolutely
  278. necessary for Calc to work.  The others are for commands and features
  279. that you may wish to use before typing `M-#' for the first time.  In
  280. particular, `full-calc' and `full-calc-keypad' are autoloaded to
  281. support "standalone" operation (see "Standalone Operation"),
  282. `calc-eval' and `defmath' are autoloaded to allow other Emacs Lisp
  283. programs to use Calc facilities (see "Calling Calc from Your
  284. Programs"), and `calc-embedded-activate' is autoloaded because some
  285. Embedded Mode files may call it as soon as they are read into Emacs
  286. (see "Assignments in Embedded Mode").
  287. X
  288. X
  289. Finding Component Files
  290. ========================
  291. X
  292. X   There is no need to write `autoload' commands that point to all the
  293. various Calc component files like `calc-misc.elc' and `calc-alg.elc'. 
  294. The main file, `calc.elc', contains all the necessary `autoload'
  295. commands for these files.
  296. X
  297. X   (Actually, to conserve space `calc.elc' only autoloads a few of the
  298. component files, plus `calc-ext.elc', which in turn autoloads the rest
  299. of the components.  This allows Calc to load a little faster in the
  300. beginning, but the net effect is the same.)
  301. X
  302. X   This autoloading mechanism assumes that all the component files can
  303. be found on the `load-path'.  The `make public' and `make private'
  304. commands take care of this, but Calc has a few other strategies in
  305. case you have installed it in an unusual way.
  306. X
  307. X   If, when Calc is loaded, it is unable to find its components on the
  308. `load-path' it is given, it checks the file name in the original
  309. `autoload' command for `calc-dispatch'.  If that name included
  310. directory information, Calc adds that directory to the `load-path':
  311. X
  312. X     (autoload 'calc-dispatch "calc-2.00/calc" "Calculator" t)
  313. X
  314. Suppose the directory `/usr/gnu/src/emacs/lisp' is on the path, and
  315. the above `autoload' allows Emacs to find Calc under the name
  316. `/usr/gnu/src/emacs/lisp/calc-2.00/calc.elc'.  Then when Calc starts
  317. up it will add `/usr/gnu/src/emacs/lisp/calc-2.00' to the path so that
  318. it will later be able to find its component files.
  319. X
  320. X   If the above strategy does not locate the component files, Calc
  321. examines the variable `calc-autoload-directory'.  This is initially
  322. `nil', but you can store the name of Calc's home directory in it as a
  323. sure-fire way of getting Calc to find its components.
  324. X
  325. X
  326. Merging Source Files
  327. =====================
  328. X
  329. If the `autoload' mechanism is not managing to load each part of Calc
  330. when it is needed, you can concatenate all the `.el' files into one
  331. big file.  The order should be `calc.el', then `calc-ext.el', then all
  332. the other files in any order.  Byte-compile the resulting big file. 
  333. This merged Calculator ought to work just like Calc normally does,
  334. though it will be *substantially* slower to load.
  335. X
  336. X
  337. Key Bindings
  338. =============
  339. X
  340. Calc is normally bound to the `M-#' key.  To set up this key binding,
  341. include the following command in your `.emacs' or `lisp/default' file.
  342. X (This is done automatically by `make private' or `make public',
  343. respectively.)
  344. X
  345. X     (global-set-key "\e#" 'calc-dispatch)
  346. X
  347. X   Note that `calc-dispatch' actually works as a prefix for various
  348. two-key sequences.  If you have a convenient unused function key on
  349. your keyboard, you may wish to bind `calc-dispatch' to that as well. 
  350. You may even wish to bind other specific Calc functions like `calc' or
  351. `quick-calc' to other handy function keys.
  352. X
  353. X   Even if you bind `calc-dispatch' to other keys, it is best to bind
  354. it to `M-#' as well if you possibly can:  There are references to
  355. `M-#' all throughout the Calc manual which would confuse novice users
  356. if they didn't work as advertised.
  357. X
  358. X   Another key binding issue is the DEL key.  Some installations use a
  359. different key (such as backspace) for this purpose.  Calc normally
  360. scans the entire keymap and maps all keys defined like DEL to the
  361. `calc-pop' command.  However, this may be slow.  You can set the
  362. variable `calc-scan-for-dels' to `nil' to cause only the actual DEL
  363. key to be mapped to `calc-pop'; this will speed loading of Calc.
  364. X
  365. X
  366. The `macedit' Package
  367. ======================
  368. X
  369. The file `macedit.el' contains another useful Emacs extension called
  370. `edit-kbd-macro'.  It allows you to edit a keyboard macro in
  371. human-readable form.  The `Z E' command in Calc knows how to use it to
  372. edit user commands that have been defined by keyboard macros.  To
  373. autoload it, you will want to include the commands,
  374. X
  375. X     (autoload 'edit-kbd-macro      "macedit" "Edit Keyboard Macro" t)
  376. X     (autoload 'edit-last-kbd-macro "macedit" "Edit Keyboard Macro" t)
  377. X     (autoload 'read-kbd-macro      "macedit" "Read Keyboard Macro" t)
  378. X
  379. The `make public' and `make private' commands do this.
  380. X
  381. X
  382. The GNUPLOT Program
  383. ====================
  384. X
  385. Calc's graphing commands use the GNUPLOT program.  If you have GNUPLOT
  386. but you must type some command other than `gnuplot' to get it, you
  387. should add a command to set the Lisp variable `calc-gnuplot-name' to
  388. the appropriate file name.  You may also need to change the variables
  389. `calc-gnuplot-plot-command' and `calc-gnuplot-print-command' in order
  390. to get correct displays and hardcopies, respectively, of your plots.
  391. X
  392. X
  393. On-Line Documentation
  394. ======================
  395. X
  396. The documentation for Calc (this manual) comes in a file called
  397. `calc.texinfo'.  To format this for use as an on-line manual, type
  398. `make info' (to use the `makeinfo' program), or `make texinfo' (to use
  399. the `texinfmt.el' program which runs inside of Emacs).  The former
  400. command is recommended if it works on your system; it is faster and
  401. produces nicer-looking output.
  402. X
  403. X   The `makeinfo' program will report inconsistencies involving the
  404. nodes `Copying' and `Interactive Tutorial'; these messages should be
  405. ignored.
  406. X
  407. X   The result will be a collection of files whose names begin with
  408. `calc.info'.  You may wish to add a reference to the first of these,
  409. `calc.info' itself, to your Info system's `dir' file.  (The `M-# i'
  410. command will access `calc.info' whether or not it appears in the `dir'
  411. file.)
  412. X
  413. X   There is a Lisp variable called `calc-info-filename' which holds
  414. the name of the Info file containing Calc's on-line documentation. 
  415. Its default value is `"calc.info"', which will work correctly if the
  416. Info files are stored in Emacs' main `info/' directory, or if they are
  417. in any of the directories listed in the `load-path'.  If you keep them
  418. elsewhere, you will want to put a command of the form,
  419. X
  420. X     (setq calc-info-filename ".../calc.info")
  421. X
  422. in your `.emacs' or `lisp/default' file, where `...' represents the
  423. directory containing the Info files.  This will not be necessary if
  424. you follow the normal installation procedures.
  425. X
  426. X   The `make info' and `make texinfo' commands compare the dates on
  427. the files `calc.texinfo' and `calc.info', and run the appropriate
  428. program only if the latter file is older or does not exist.
  429. X
  430. X
  431. Printed Documentation
  432. ======================
  433. X
  434. Because the Calc manual is so large, you should only make a printed
  435. copy if you really need it.  To print the manual, you will need the
  436. TeX typesetting program (this is a free program by Donald Knuth at
  437. Stanford University) as well as the `texindex' program and
  438. `texinfo.tex' file that come with GNU Emacs.
  439. X
  440. X   To print the Calc manual in one huge 550 page tome, type `make tex'. 
  441. This will take care of running the manual through TeX twice so that
  442. references to later parts of the manual will have correct page numbers. 
  443. (Don't worry if you get some "overfull box" warnings.  Also, some
  444. versions of `texinfo.tex' have a bug that causes cross-references to
  445. the index to print incorrectly.)
  446. X
  447. X   The result will be a device-independent output file called
  448. `calc.dvi', which you must print in whatever way is right for your
  449. system.  On many systems, the command is
  450. X
  451. X     lpr -d calc.dvi
  452. X
  453. X   Some people find the Calc manual to be too large to handle easily. 
  454. In fact, some versions of TeX have too little memory to print it.  So
  455. Calc includes a `calc-split-manual' command that splits `calc.texinfo'
  456. into two volumes, the Calc Tutorial and the Calc Reference.  The
  457. easiest way to use it is to type `make tex2' instead of `make tex'. 
  458. The result will be two smaller files, `calctut.dvi' and `calcref.dvi'.
  459. X The former contains the tutorial part of the manual; the latter
  460. contains the reference part.  Both volumes include copies of the
  461. "Getting Started" chapter and licensing information.
  462. X
  463. X   To save disk space, you may wish to delete `calctut.*' and
  464. `calcref.*' after you're done.  Don't delete `calc.texinfo', because
  465. you will need it to install future patches to Calc.  The `make tex2'
  466. command takes care of this for you.
  467. X
  468. X   The `make textut' command formats only the Calc Tutorial volume,
  469. producing `calctut.dvi' but not `calcref.dvi'.  Likewise, `make
  470. texref' formats only the Calc Reference volume.
  471. X
  472. X   Finally, there is a `calc-split-summary' command that splits off
  473. just the Calc Summary appendix suitable for printing by itself.  Type
  474. `make summary' instead of `make tex'.  The resulting `calcsum.dvi'
  475. file will print in less than 20 pages.
  476. X
  477. X   If you don't have TeX, you can print the summary as a plain text
  478. file by going to the `Summary' node in Calc's Info file, then typing
  479. `M-x print-buffer' (see "Summary").
  480. X
  481. X
  482. Settings File
  483. ==============
  484. X
  485. Another variable you might want to set is `calc-settings-file', which
  486. holds the file name in which commands like `m m' and `Z P' store
  487. "permanent" definitions.  The default value for this variable is
  488. `"~/.emacs"'.  If `calc-settings-file' does not contain `".emacs"' as
  489. a substring, and if the variable `calc-loaded-settings-file' is `nil',
  490. then Calc will automatically load your settings file (if it exists)
  491. the first time Calc is invoked.
  492. X
  493. X
  494. Testing the Installation
  495. =========================
  496. X
  497. To test your installation of Calc, start a new Emacs and type `M-# c'
  498. to make sure the autoloads and key bindings work.  Type `M-# i' to
  499. make sure Calc can find its Info documentation.  Press `q' to exit the
  500. Info system and `M-# c' to re-enter the Calculator.  Type `20 S' to
  501. compute the sine of 20 degrees; this will test the autoloading of the
  502. extensions modules.  The result should be 0.342020143326.  Finally,
  503. press `M-# c' again to make sure the Calculator can exit.
  504. X
  505. X   You may also wish to test the GNUPLOT interface; to plot a sine
  506. wave, type `' [0 .. 360], sin(x) RET g f'.  Type `g q' when you are
  507. done viewing the plot.
  508. X
  509. X   Calc is now ready to use.  If you wish to go through the Calc
  510. Tutorial, press `M-# t' to begin.
  511. X
  512. X
  513. (The above text is included in both the Calc documentation and the
  514. file INSTALL in the Calc distribution directory.)
  515. SHAR_EOF
  516. chmod 0644 INSTALL ||
  517. echo 'restore of INSTALL failed'
  518. Wc_c="`wc -c < 'INSTALL'`"
  519. test 17492 -eq "$Wc_c" ||
  520.     echo 'INSTALL: original size 17492, current size' "$Wc_c"
  521. rm -f _shar_wnt_.tmp
  522. fi
  523. # ============= Makefile ==============
  524. if test -f 'Makefile' -a X"$1" != X"-c"; then
  525.     echo 'x - skipping Makefile (File already exists)'
  526.     rm -f _shar_wnt_.tmp
  527. else
  528. > _shar_wnt_.tmp
  529. echo 'x - extracting Makefile (Text)'
  530. sed 's/^X//' << 'SHAR_EOF' > 'Makefile' &&
  531. # Makefile for "Calc 2.00", the GNU Emacs Calculator.
  532. #  Copyright (C) 1991 Free Software Foundation.
  533. #  Author: Dave Gillespie.
  534. #  Author's address: daveg@csvax.caltech.edu; 256-80 Caltech/Pasadena CA 91125.
  535. X
  536. # This program is free software; you can redistribute it and/or modify
  537. # it under the terms of the GNU General Public License as published by
  538. # the Free Software Foundation (any version).
  539. X
  540. # This program is distributed in the hope that it will be useful,
  541. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  542. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  543. # GNU General Public License for more details.
  544. X
  545. # You should have received a copy of the GNU General Public License
  546. # along with this program; see the file COPYING.  If not, write to
  547. # the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  548. X
  549. X
  550. # To install Calc for private use, type `make'.
  551. # To install Calc for public use, type `make install'.
  552. X
  553. # How to read a Makefile:
  554. #   The command `make target' looks for `target:' in the Makefile.
  555. #   First, any sub-targets after the `:' are made.
  556. #   Then, the Unix commands on the following lines are executed.
  557. #   `$(SYMBOL)' expands according to the `SYMBOL =' definition below.
  558. X
  559. X
  560. # Programs.
  561. EMACS    = emacs
  562. TEX      = tex
  563. TEXINDEX = texindex
  564. MAKEINFO = makeinfo
  565. MAKE     = make
  566. ECHO     = @echo
  567. REMOVE     = -rm
  568. # (The leading `@' tells "make" not to echo the command itself during make;
  569. # The leading `-' tells "make" to keep going if the command fails.)
  570. X
  571. # Other macros.
  572. EFLAGS   = -batch
  573. MAINT     = -l calc-maint.elc
  574. X
  575. # Control whether intermediate files are kept.
  576. PURGE     = -rm
  577. #PURGE     = echo Not deleting:
  578. X
  579. X
  580. X
  581. # Do full Calc installation.  (Note that `make' == `make all'.)
  582. # These are written this way instead of `all: compile private info'
  583. # to make the steps more explicit while the `make' is in progress.
  584. all:
  585. X    $(MAKE) compile
  586. X    $(MAKE) private
  587. X    $(MAKE) info
  588. X    $(ECHO) "Calc is now installed."
  589. X
  590. install:
  591. X    $(MAKE) compile
  592. X    $(MAKE) public
  593. X    $(MAKE) info
  594. X    $(ECHO) "Calc is now installed."
  595. X
  596. X
  597. # Compile Calc.
  598. compile: maint
  599. X    $(EMACS) $(EFLAGS) $(MAINT) -f calc-compile
  600. X
  601. X
  602. # Add autoload and set-global-key commands to system default file.
  603. public: maint
  604. X    $(EMACS) $(EFLAGS) $(MAINT) -f calc-public-autoloads
  605. X
  606. X
  607. # Add autoload and set-global-key commands to ~/.emacs file.
  608. private: maint
  609. X    $(EMACS) $(EFLAGS) $(MAINT) -f calc-private-autoloads
  610. X
  611. X
  612. # Format the Calc manual for the Info system using makeinfo.
  613. info: calc.info
  614. calc.info: calc.texinfo
  615. X    -$(MAKEINFO) calc.texinfo
  616. X    $(ECHO) "Please ignore warnings for Copying, Getting Started, and Interactive Tutorial."
  617. X    $(MAKE) texinfo
  618. X
  619. X
  620. # Format the Calc manual for the Info system using texinfo.el.
  621. # (Use this only if you do not have makeinfo.)
  622. texinfo: calc.info-2
  623. calc.info-2: calc.texinfo
  624. X    $(EMACS) $(EFLAGS) calc.texinfo -f texinfo-format-buffer -f save-buffer
  625. X
  626. X
  627. # Format the Calc manual as one printable volume using TeX.
  628. tex:
  629. X    $(TEX) calc.texinfo
  630. X    $(TEXINDEX) calc.[cfkptv]?
  631. X    $(TEX) calc.texinfo
  632. X    $(PURGE) calc.cp calc.fn calc.ky calc.pg calc.tp calc.vr
  633. X    $(PURGE) calc.cps calc.fns calc.kys calc.pgs calc.tps calc.vrs
  634. X    $(PURGE) calc.aux calc.toc
  635. X
  636. X
  637. # Format the Calc manual as two printable volumes (Tutorial and Reference).
  638. tex2: texsplit texvol1 texvol2
  639. X
  640. # Format the Calc Tutorial volume only.
  641. textut: texsplit texvol1
  642. X    $(PURGE) calcref.tex
  643. X
  644. # Format the Calc Reference volume only.
  645. texref: texsplit
  646. X    $(PURGE) calctut.tex
  647. X
  648. texsplit: maint
  649. X    $(EMACS) $(EFLAGS) $(MAINT) calc.texinfo -f calc-split-manual
  650. X
  651. texvol1:
  652. X    $(TEX) calctut.tex
  653. X    $(TEXINDEX) calctut.??
  654. X    $(TEX) calctut.tex
  655. X    $(PURGE) calctut.tex calctut.?? calctut.??s calctut.aux calctut.toc
  656. X
  657. texvol2:
  658. X    $(TEX) calcref.tex
  659. X    $(TEXINDEX) calcref.??
  660. X    $(TEX) calcref.tex
  661. X    $(PURGE) calcref.tex calcref.?? calcref.??s calcref.aux calcref.toc
  662. X
  663. X
  664. # Format the Calc summary separately using TeX.
  665. summary: texsum
  666. X    $(TEX) calcsum.tex
  667. X    $(PURGE) calcsum.?? calcsum.aux calcsum.toc
  668. X
  669. texsum: maint
  670. X    $(EMACS) $(EFLAGS) $(MAINT) calc.texinfo -f calc-split-summary
  671. X
  672. X
  673. # All this because "-l calc-maint" doesn't work.
  674. maint: calc-maint.elc
  675. calc-maint.elc: calc-maint.el
  676. X    cp calc-maint.el calc-maint.elc
  677. X
  678. X
  679. # Create an Emacs TAGS file
  680. tags: TAGS
  681. TAGS:
  682. X    etags *.el
  683. X
  684. X
  685. # Delete .elc files and other reconstructible files.
  686. clean:  clean.elc clean.info clean.tex
  687. X
  688. clean.elc:
  689. X    $(REMOVE) calc-*.elc
  690. X    $(REMOVE) macedit.elc
  691. X
  692. clean.info:
  693. X    $(REMOVE) calc.info*
  694. X
  695. clean.tex:
  696. X    $(REMOVE) calc.cp calc.fn calc.ky calc.pg calc.tp calc.vr
  697. X    $(REMOVE) calc.cps calc.fns calc.kys calc.pgs calc.tps calc.vrs
  698. X    $(REMOVE) calc.aux calc.log calc.toc calc.dvi
  699. X    $(REMOVE) calcref.*
  700. X    $(REMOVE) calctut.*
  701. X    $(REMOVE) calcsum.*
  702. X
  703. X
  704. SHAR_EOF
  705. chmod 0644 Makefile ||
  706. echo 'restore of Makefile failed'
  707. Wc_c="`wc -c < 'Makefile'`"
  708. test 4630 -eq "$Wc_c" ||
  709.     echo 'Makefile: original size 4630, current size' "$Wc_c"
  710. rm -f _shar_wnt_.tmp
  711. fi
  712. # ============= README ==============
  713. if test -f 'README' -a X"$1" != X"-c"; then
  714.     echo 'x - skipping README (File already exists)'
  715.     rm -f _shar_wnt_.tmp
  716. else
  717. > _shar_wnt_.tmp
  718. echo 'x - extracting README (Text)'
  719. sed 's/^X//' << 'SHAR_EOF' > 'README' &&
  720. X
  721. This directory contains version 2.00 of Calc, an advanced desk
  722. calculator for GNU Emacs.
  723. X
  724. "Calc"  Copyright 1990, 1991  Free Software Foundation, Inc.
  725. X
  726. Written and maintained by:   Dave Gillespie
  727. X                 256-80 Caltech
  728. X                 Pasadena CA 91125
  729. X                 daveg@synaptics.com, uunet!synaptx!daveg
  730. X                 or: daveg@csvax.cs.caltech.edu, cit-vax!daveg
  731. X
  732. X
  733. X
  734. XFrom the introduction to the manual:
  735. X
  736. X  "Calc" is an advanced calculator and mathematical tool that runs as
  737. X  part of the GNU Emacs environment.  Very roughly based on the HP-28/48
  738. X  series of calculators, its many features include:
  739. X
  740. X    * Choice of algebraic or RPN (stack-based) entry of calculations.
  741. X
  742. X    * Arbitrary precision integers and floating-point numbers.
  743. X
  744. X    * Arithmetic on rational numbers, complex numbers (rectangular and
  745. X      polar), error forms with standard deviations, open and closed
  746. X      intervals, vectors and matrices, dates and times, infinities,
  747. X      sets, quantities with units, and algebraic formulas.
  748. X
  749. X    * Mathematical operations such as logarithms and trigonometric functions.
  750. X
  751. X    * Programmer's features (bitwise operations, non-decimal numbers).
  752. X
  753. X    * Financial functions such as future value and internal rate of return.
  754. X
  755. X    * Number theoretical features such as prime factorization and
  756. X      arithmetic modulo M for any M.
  757. X
  758. X    * Algebraic manipulation features, including symbolic calculus.
  759. X
  760. X    * Moving data to and from regular editing buffers.
  761. X
  762. X    * "Embedded mode" for manipulating Calc formulas and data directly
  763. X      inside any editing buffer.
  764. X
  765. X    * Graphics using GNUPLOT, a versatile (and free) plotting program.
  766. X
  767. X    * Easy programming using keyboard macros, algebraic formulas,
  768. X      algebraic rewrite rules, or extended Emacs Lisp.
  769. X
  770. X
  771. X
  772. X
  773. To install Calc:
  774. X
  775. X  1. Type "uncompress calc-2.00.tar.Z"
  776. X
  777. X  2. Type "tar xvf calc-2.00.tar"
  778. X
  779. 1,2. Alternatively: "zcat calc-2.00.tar.Z | tar xvf -"
  780. X
  781. X  3. Note that the Calc tar file now creates a "calc-2.00" subdirectory
  782. X     of the current directory in which to place its files.
  783. X
  784. X  4. Follow the instructions in the file "INSTALL".
  785. X
  786. X
  787. X
  788. Calc is written entirely in Emacs Lisp, for maximum portability.
  789. You do not need to recompile Emacs to install and use Calc.
  790. X
  791. You will need about eight megabytes of disk space to install Calc
  792. and its Info documentation.
  793. X
  794. See the file INSTALL for installation instructions.  The instructions
  795. may seem long, but on typical systems you will only need to follow the
  796. steps shown in the first section.
  797. X
  798. Don't even try to run Calc in uncompiled (.el) form!  It's far too slow.
  799. X
  800. X
  801. I am anxious to hear about your experiences using Calc.  Send mail to
  802. "daveg@synaptics.com" or "daveg@csvax.cs.caltech.edu".  A bug report is
  803. most useful if you include the exact input and output that occurred,
  804. any modes in effect (such as the current precision), and so on.  If
  805. you find Calc is difficult to operate in any way, or if you have other
  806. suggestions, don't hesitate to let me know.  If you find errors
  807. (including simple typos) in the manual, let me know.  Even if you
  808. find no bugs at all I would love to hear your opinions.
  809. X
  810. The latest Calc tar files and patches are always available for anonymous
  811. FTP on csvax.cs.caltech.edu [131.215.131.131].  Look in the "pub"
  812. subdirectory.  Calc may also be available soon on prep.ai.mit.edu.
  813. X
  814. Thanks,
  815. X
  816. X                                -- Dave
  817. X
  818. X
  819. X
  820. X
  821. X
  822. Summary of changes to "Calc"
  823. ------- -- ------- --  ----
  824. X
  825. X
  826. Version 2.00:
  827. X
  828. X * First complete posting of Calc since 1.01.
  829. X
  830. X * Most parts of Calc have seen changes since version 1.07.  See
  831. X   section "New for Calc 2.00" in the manual for a summary.  In
  832. X   the FTP version of the Calc distribution, the file README.prev
  833. X   contains a detailed change history from 1.00 up to 2.00.
  834. X
  835. SHAR_EOF
  836. chmod 0644 README ||
  837. echo 'restore of README failed'
  838. Wc_c="`wc -c < 'README'`"
  839. test 3706 -eq "$Wc_c" ||
  840.     echo 'README: original size 3706, current size' "$Wc_c"
  841. rm -f _shar_wnt_.tmp
  842. fi
  843. # ============= calc.el ==============
  844. if test -f 'calc.el' -a X"$1" != X"-c"; then
  845.     echo 'x - skipping calc.el (File already exists)'
  846.     rm -f _shar_wnt_.tmp
  847. else
  848. > _shar_wnt_.tmp
  849. echo 'x - extracting calc.el (Text)'
  850. sed 's/^X//' << 'SHAR_EOF' > 'calc.el' &&
  851. ;; Calculator for GNU Emacs version 2.00, part I
  852. ;; Copyright (C) 1990, 1991 Free Software Foundation, Inc.
  853. ;; Written by Dave Gillespie, daveg@csvax.cs.caltech.edu.
  854. X
  855. ;; This file is part of GNU Emacs.
  856. X
  857. ;; GNU Emacs is distributed in the hope that it will be useful,
  858. ;; but WITHOUT ANY WARRANTY.  No author or distributor
  859. ;; accepts responsibility to anyone for the consequences of using it
  860. ;; or for whether it serves any particular purpose or works at all,
  861. ;; unless he says so in writing.  Refer to the GNU Emacs General Public
  862. ;; License for full details.
  863. X
  864. ;; Everyone is granted permission to copy, modify and redistribute
  865. ;; GNU Emacs, but only under the conditions described in the
  866. ;; GNU Emacs General Public License.   A copy of this license is
  867. ;; supposed to have been given to you along with GNU Emacs so you
  868. ;; can know your rights and responsibilities.  It should be in a
  869. ;; file named COPYING.  Among other things, the copyright notice
  870. ;; and this notice must be preserved on all copies.
  871. X
  872. X
  873. X
  874. ;;; Calc is split into many files.  This file is the main entry point.
  875. ;;; This file includes autoload commands for various other basic Calc
  876. ;;; facilities.  The more advanced features are based in calc-ext, which
  877. ;;; in turn contains autoloads for the rest of the Calc files.  This
  878. ;;; odd set of interactions is designed to make Calc's loading time
  879. ;;; be as short as possible when only simple calculations are needed.
  880. X
  881. ;;; Suggested usage:
  882. ;;;
  883. ;;;   (autoload 'calc-dispatch "calc" "Emacs Calculator" t nil)
  884. ;;;   (global-set-key "\e#" 'calc-dispatch)
  885. ;;;   Type `M-# M-#' to start.
  886. ;;;
  887. ;;; The Calc home directory must be added to the Emacs load-path:
  888. ;;; 
  889. ;;;   (setq load-path (cons "/x/y/z/calc" load-path))
  890. ;;;
  891. ;;; where "/x/y/z/calc" represents the full name of the Calc home directory.
  892. ;;;
  893. ;;; See the file INSTALL for a complete list of recommeded autoload
  894. ;;; commands (though only calc-dispatch is absolutely necessary).
  895. X
  896. X
  897. ;;; Author's address:
  898. ;;;   Dave Gillespie, daveg@synaptics.com, uunet!synaptx!daveg.
  899. ;;;   Synaptics, Inc., 2860 Zanker Rd #206, San Jose, CA 95134.
  900. ;;;
  901. ;;; The old address daveg@csvax.cs.caltech.edu will continue to
  902. ;;; work for the foreseeable future.
  903. ;;;
  904. ;;; The latest version of Calc is always available from anonymous FTP
  905. ;;; on csvax.cs.caltech.edu [131.215.131.131]; look in ~ftp/pub/calc*.
  906. ;;; It should also be available on prep.ai.mit.edu.
  907. ;;;
  908. ;;; Bug reports and suggestions are always welcome!
  909. X
  910. X
  911. ;;; All functions, macros, and Lisp variables defined here begin with one
  912. ;;; of the prefixes "math", "Math", or "calc", with the exceptions of
  913. ;;; "full-calc", "full-calc-keypad", "another-calc", "quick-calc",
  914. ;;; "report-calc-bug", and "defmath".  User-accessible variables begin
  915. ;;; with "var-".
  916. X
  917. X
  918. X
  919. (provide 'calc)
  920. X
  921. X
  922. (defun calc-record-compilation-date ()
  923. X  (calc-record-compilation-date-macro)
  924. )
  925. (calc-record-compilation-date)
  926. X
  927. X
  928. ;;; The "###autoload" comment will be used by Emacs version 19 for
  929. ;;; maintaining the loaddefs.el file automatically.
  930. X
  931. ;;;###autoload
  932. (defvar calc-info-filename "calc.info"
  933. X  "*File name in which to look for the Calculator's Info documentation.")
  934. X
  935. ;;;###autoload
  936. (defvar calc-settings-file "~/.emacs"
  937. X  "*File in which to record permanent settings; default is \"~/.emacs\".")
  938. X
  939. ;;;###autoload
  940. (defvar calc-autoload-directory nil
  941. X  "Name of directory from which additional \".elc\" files for Calc should be
  942. loaded.  Should include a trailing \"/\".
  943. If nil, use original installation directory.
  944. This can safely be nil as long as the Calc files are on the load-path.")
  945. X
  946. ;;;###autoload
  947. (defvar calc-gnuplot-name "gnuplot"
  948. X  "*Name of GNUPLOT program, for calc-graph features.")
  949. X
  950. ;;;###autoload
  951. (defvar calc-gnuplot-plot-command nil
  952. X  "*Name of command for displaying GNUPLOT output; %s = file name to print.")
  953. X
  954. ;;;###autoload
  955. (defvar calc-gnuplot-print-command "lp %s"
  956. X  "*Name of command for printing GNUPLOT output; %s = file name to print.")
  957. X
  958. X
  959. ;; Address of the author of Calc, for use by report-calc-bug.
  960. ;; (The following address is probably more likely to be reachable from
  961. ;; distant sites than daveg@synaptics.com.)
  962. (defvar calc-bug-address "daveg@csvax.cs.caltech.edu")
  963. X
  964. X
  965. ;; If T, scan keymaps to find all DEL-like keys.
  966. ;; If NIL, only DEL itself is mapped to calc-pop.
  967. (defvar calc-scan-for-dels t)
  968. X
  969. X
  970. X
  971. (defvar calc-extensions-loaded nil)
  972. X
  973. X
  974. X
  975. ;;; IDEAS:
  976. ;;;
  977. ;;;   Fix rewrite mechanism to do less gratuitous rearrangement of terms.
  978. ;;;   Implement a pattern-based "refers" predicate.
  979. ;;;
  980. ;;;   Make it possible to Undo a selection command.
  981. ;;;   Figure out how to allow selecting rows of matrices.
  982. ;;;   If cursor was in selection before, move it after j n, j p, j L, etc.
  983. ;;;   Consider reimplementing calc-delete-selection using rewrites.
  984. ;;;
  985. ;;;   Implement line-breaking in non-flat compositions (is this desirable?).
  986. ;;;   Implement matrix formatting with multi-line components.
  987. ;;;
  988. ;;;   Have "Z R" define a user command based on a set of rewrite rules.
  989. ;;;   Support "incf" and "decf" in defmath definitions.
  990. ;;;   Have defmath generate calls to calc-binary-op or calc-unary-op.
  991. ;;;   Make some way to define algebraic functions using keyboard macros.
  992. ;;;
  993. ;;;   Allow calc-word-size=0 => Common Lisp-style signed bitwise arithmetic.
  994. ;;;   Consider digamma function (and thus arb. prec. Euler's gamma constant).
  995. ;;;   May as well make continued-fractions stuff available to the user.
  996. ;;;
  997. ;;;   How about matrix eigenvalues, SVD, pseudo-inverse, etc.?
  998. ;;;   Should cache matrix inverses as well as decompositions.
  999. ;;;   If dividing by a non-square matrix, use least-squares automatically.
  1000. ;;;   Consider supporting matrix exponentials.
  1001. ;;;
  1002. ;;;   Have ninteg detect and work around singularities at the endpoints.
  1003. ;;;   Use an adaptive subdivision algorithm for ninteg.
  1004. ;;;   Provide nsum and nprod to go along with ninteg.
  1005. ;;;
  1006. ;;;   Handle TeX-mode parsing of \matrix{ ... } where ... contains braces.
  1007. ;;;   Support AmS-TeX's \{d,t,}frac, \{d,t,}binom notations.
  1008. ;;;   Format and parse sums and products in Eqn and Math modes.
  1009. ;;;
  1010. ;;;   Get math-read-big-expr to read sums, products, etc.
  1011. ;;;   Change calc-grab-region to use math-read-big-expr.
  1012. ;;;   Have a way to define functions using := in Embedded Mode.
  1013. ;;;
  1014. ;;;   Support polar plotting with GNUPLOT.
  1015. ;;;   Make a calc-graph-histogram function.
  1016. ;;;
  1017. ;;;   Replace hokey formulas for complex functions with formulas designed
  1018. ;;;      to minimize roundoff while maintaining the proper branch cuts.
  1019. ;;;   Test accuracy of advanced math functions over whole complex plane.
  1020. ;;;   Extend Bessel functions to provide arbitrary precision.
  1021. ;;;   Extend advanced math functions to handle error forms and intervals.
  1022. ;;;   Provide a better implementation for math-sin-cos-raw.
  1023. ;;;   Provide a better implementation for math-hypot.
  1024. ;;;   Provide a better implementation for math-make-frac.
  1025. ;;;   Provide a better implementation for calcFunc-prfac.
  1026. ;;;   Provide a better implementation for calcFunc-integ.
  1027. ;;;   Provide a better implementation for calcFunc-factor.
  1028. ;;;
  1029. ;;;   Provide more examples in the tutorial section of the manual.
  1030. ;;;   Cover in the tutorial:  simplification modes, declarations,
  1031. ;;;       bitwise stuff, selections, matrix mapping, financial functions.
  1032. ;;;   Provide more Lisp programming examples in the manual.
  1033. ;;;   Finish the Internals section of the manual (and bring it up to date).
  1034. ;;;
  1035. ;;;   Tim suggests adding spreadsheet-like features.
  1036. ;;;   Implement language modes for Gnuplot, Lisp, Ada, APL, ...?
  1037. ;;;
  1038. X
  1039. X
  1040. ;;; For atan series, if x > tan(pi/12) (about 0.268) reduce using the identity
  1041. ;;;   atan(x) = atan((x * sqrt(3) - 1) / (sqrt(3) + x)) + pi/6.
  1042. X
  1043. X
  1044. ;;; A better integration algorithm:
  1045. ;;;   Use breadth-first instead of depth-first search, as follows:
  1046. ;;;    The integral cache allows unfinished integrals in symbolic notation
  1047. ;;;    on the righthand side.  An entry with no unfinished integrals on the
  1048. ;;;    RHS is "complete"; references to it elsewhere are replaced by the
  1049. ;;;    integrated value.  More than one cache entry for the same integral
  1050. ;;;    may exist, though if one becomes complete, the others may be deleted.
  1051. ;;;    The integrator works by using every applicable rule (such as
  1052. ;;;    substitution, parts, linearity, etc.) to generate possible righthand
  1053. ;;;    sides, all of which are entered into the cache.  Now, as long as the
  1054. ;;;    target integral is not complete (and the time limit has not run out)
  1055. ;;;    choose an incomplete integral from the cache and, for every integral
  1056. ;;;    appearing in its RHS's, add those integrals to the cache using the
  1057. ;;;    same substitition, parts, etc. rules.  The cache should be organized
  1058. ;;;    as a priority queue, choosing the "simplest" incomplete integral at
  1059. ;;;    each step, or choosing randomly among equally simple integrals.
  1060. ;;;    Simplicity equals small size, and few steps removed from the original
  1061. ;;;    target integral.  Note that when the integrator finishes, incomplete
  1062. ;;;    integrals can be left in the cache, so the algorithm can start where
  1063. ;;;    it left off if another similar integral is later requested.
  1064. ;;;   Breadth-first search would avoid the nagging problem of, e.g., whether
  1065. ;;;   to use parts or substitution first, and which decomposition is best.
  1066. ;;;   All are tried, and any path that diverges will quickly be put on the
  1067. ;;;   back burner by the priority queue.
  1068. ;;;   Note: Probably a good idea to call math-simplify-extended before
  1069. ;;;   measuring a formula's simplicity.
  1070. X
  1071. X
  1072. X
  1073. X
  1074. X
  1075. X
  1076. ;; Calculator stack.
  1077. ;; Entries are 3-lists:  Formula, Height (in lines), Selection (or nil).
  1078. (defvar calc-stack '((top-of-stack 1 nil)))
  1079. X
  1080. ;; Index into calc-stack of "top" of stack.
  1081. ;; This is 1 unless calc-truncate-stack has been used.
  1082. ;;(defvar calc-stack-top 1)
  1083. X
  1084. ;; If non-NIL, load the calc-ext module automatically when calc is loaded.
  1085. ;;(defvar calc-always-load-extensions nil)
  1086. X
  1087. ;; If non-NIL, display line numbers in Calculator stack.
  1088. ;;(defvar calc-line-numbering t)
  1089. X
  1090. ;; If non-NIL, break long values across multiple lines in Calculator stack.
  1091. ;;(defvar calc-line-breaking t)
  1092. X
  1093. ;; If NIL, stack display is left-justified.
  1094. ;; If 'right, stack display is right-justified.
  1095. ;; If 'center, stack display is centered."
  1096. ;;(defvar calc-display-just nil)
  1097. X
  1098. ;; Horizontal origin of displayed stack entries.
  1099. ;; In left-justified mode, this is effectively indentation.  (Default 0).
  1100. ;; In right-justified mode, this is effectively window width.
  1101. ;; In centered mode, center of stack entry is placed here.
  1102. ;;(defvar calc-display-origin nil)
  1103. X
  1104. ;; Radix for entry and display of numbers in calc-mode, 2-36.
  1105. ;;(defvar calc-number-radix 10)
  1106. X
  1107. ;; If non-NIL, leading zeros are provided to pad integers to calc-word-size.
  1108. ;;(defvar calc-leading-zeros nil)
  1109. X
  1110. ;; If non-NIL, group digits in large displayed integers by inserting spaces.
  1111. ;; If an integer, group that many digits at a time.
  1112. ;; If 't', use 4 for binary and hex, 3 otherwise.
  1113. ;;(defvar calc-group-digits nil)
  1114. X
  1115. ;; The character (in the form of a string) to be used for grouping digits.
  1116. ;; This is used only when calc-group-digits mode is on.
  1117. ;;(defvar calc-group-char ",")
  1118. X
  1119. ;; The character (in the form of a string) to be used as a decimal point.
  1120. ;;(defvar calc-point-char ".")
  1121. X
  1122. ;; Format of displayed fractions; a string of one or two of ":" or "/".
  1123. ;;(defvar calc-frac-format '(":" nil))
  1124. X
  1125. ;; If non-NIL, prefer fractional over floating-point results.
  1126. ;;(defvar calc-prefer-frac nil)
  1127. X
  1128. ;; Format of displayed hours-minutes-seconds angles, a format string.
  1129. ;; String must contain three %s marks for hours, minutes, seconds respectively.
  1130. ;;(defvar calc-hms-format "%s@ %s' %s\"")
  1131. X
  1132. ;; Format of displayed date forms.
  1133. ;;(defvar calc-date-format '((H ":" mm ":" SS pp " ") Www " " Mmm " " D ", " YYYY))
  1134. X
  1135. ;; Format to use for display of floating-point numbers in calc-mode.
  1136. ;; Must be a list of one of the following forms:
  1137. ;;  (float 0)      Floating point format, display full precision.
  1138. ;;  (float N)      N > 0: Floating point format, at most N significant figures.
  1139. ;;  (float -N)     -N < 0: Floating point format, calc-internal-prec - N figs.
  1140. ;;  (fix N)        N >= 0: Fixed point format, N places after decimal point.
  1141. ;;  (sci 0)        Scientific notation, full precision.
  1142. ;;  (sci N)        N > 0: Scientific notation, N significant figures.
  1143. ;;  (sci -N)       -N < 0: Scientific notation, calc-internal-prec - N figs.
  1144. ;;  (eng 0)        Engineering notation, full precision.
  1145. ;;  (eng N)        N > 0: Engineering notation, N significant figures.
  1146. ;;  (eng -N)       -N < 0: Engineering notation, calc-internal-prec - N figs.
  1147. ;;(defvar calc-float-format '(float 0))
  1148. X
  1149. ;; Format to use when full precision must be displayed.
  1150. ;;(defvar calc-full-float-format '(float 0))
  1151. X
  1152. ;; Format to use for display of complex numbers in calc-mode.  Must be one of:
  1153. ;;   nil            Use (x, y) form.
  1154. ;;   i              Use x + yi form.
  1155. ;;   j              Use x + yj form.
  1156. ;;(defvar calc-complex-format nil)
  1157. X
  1158. ;; Preferred form, either 'cplx or 'polar, for complex numbers.
  1159. ;;(defvar calc-complex-mode 'cplx)
  1160. X
  1161. ;; If NIL, 1 / 0 is left unsimplified.
  1162. ;; If 0, 1 / 0 is changed to inf (zeros are considered positive).
  1163. ;; Otherwise, 1 / 0 is changed to uinf (undirected infinity).
  1164. ;;(defvar calc-infinite-mode nil)
  1165. X
  1166. ;; If non-NIL, display vectors of byte-sized integers as strings.
  1167. ;;(defvar calc-display-strings nil)
  1168. X
  1169. ;; If NIL, vector elements are left-justified.
  1170. ;; If 'right, vector elements are right-justified.
  1171. ;; If 'center, vector elements are centered."
  1172. ;;(defvar calc-matrix-just 'center)
  1173. X
  1174. ;; If non-NIL, display vectors one element per line.
  1175. ;;(defvar calc-break-vectors nil)
  1176. X
  1177. ;; If non-NIL, display long vectors in full.  If NIL, use abbreviated form.
  1178. ;;(defvar calc-full-vectors t)
  1179. X
  1180. ;; If non-NIL, display long vectors in full in the trail.
  1181. ;;(defvar calc-full-trail-vectors t)
  1182. X
  1183. ;; If non-NIL, separate elements of displayed vectors with this string.
  1184. ;;(defvar calc-vector-commas ",")
  1185. X
  1186. ;; If non-NIL, surround displayed vectors with these characters.
  1187. ;;(defvar calc-vector-brackets "[]")
  1188. X
  1189. ;; A list of code-letter symbols that control "big" matrix display.
  1190. ;; If 'R is present, display inner brackets for matrices.
  1191. ;; If 'O is present, display outer brackets for matrices (above/below).
  1192. ;; If 'C is present, display outer brackets for matrices (centered).
  1193. ;;(defvar calc-matrix-brackets '(R O))
  1194. X
  1195. ;; Language or format for entry and display of stack values.  Must be one of:
  1196. ;;   nil            Use standard Calc notation.
  1197. ;;   flat           Use standard Calc notation, one-line format.
  1198. ;;   big         Display formulas in 2-d notation (enter w/std notation).
  1199. ;;   unform        Use unformatted display: add(a, mul(b,c)).
  1200. ;;   c              Use C language notation.
  1201. ;;   pascal         Use Pascal language notation.
  1202. ;;   fortran        Use Fortran language notation.
  1203. ;;   tex            Use TeX notation.
  1204. ;;   eqn        Use eqn notation.
  1205. ;;   math           Use Mathematica(tm) notation.
  1206. ;;   maple        Use Maple notation.
  1207. ;;(defvar calc-language nil)
  1208. X
  1209. ;; Numeric prefix argument for the command that set calc-language.
  1210. ;;(defvar calc-language-option nil)
  1211. X
  1212. ;; Open-parenthesis string for function call notation.
  1213. ;;(defvar calc-function-open "(")
  1214. X
  1215. ;; Close-parenthesis string for function call notation.
  1216. ;;(defvar calc-function-close ")")
  1217. X
  1218. ;; Function through which to pass strings after formatting.
  1219. ;;(defvar calc-language-output-filter nil)
  1220. X
  1221. ;; Function through which to pass strings before parsing.
  1222. ;;(defvar calc-language-input-filter nil)
  1223. X
  1224. ;; Formatting function used for non-decimal numbers.
  1225. ;;(defvar calc-radix-formatter nil)
  1226. X
  1227. ;; Label to display at left of formula.
  1228. ;;(defvar calc-left-label "")
  1229. X
  1230. ;; Label to display at right of formula.
  1231. ;;(defvar calc-right-label "")
  1232. X
  1233. ;; Minimum number of bits per word, if any, for binary operations in calc-mode.
  1234. ;;(defvar calc-word-size 32)
  1235. X
  1236. ;; Most recently used value of M in a modulo form.
  1237. ;;(defvar calc-previous-modulo nil)
  1238. X
  1239. ;; Type of simplification applied to results.
  1240. ;; If 'none, results are not simplified when pushed on the stack.
  1241. ;; If 'num, functions are simplified only when args are constant.
  1242. ;; If NIL, only fast simplifications are applied.
  1243. ;; If 'binary, math-clip is applied if appropriate.
  1244. ;; If 'alg, math-simplify is applied.
  1245. ;; If 'ext, math-simplify-extended is applied.
  1246. ;; If 'units, math-simplify-units is applied.
  1247. ;;(defvar calc-simplify-mode nil)
  1248. X
  1249. ;; If non-NIL, recompute evalto's automatically when necessary.
  1250. ;;(defvar calc-auto-recompute t)
  1251. X
  1252. ;; If non-NIL, display shows unformatted Lisp exprs.  (For debugging)
  1253. ;;(defvar calc-display-raw nil)
  1254. X
  1255. ;; Number of digits of internal precision for calc-mode calculations.
  1256. ;;(defvar calc-internal-prec 12)
  1257. X
  1258. ;; If non-NIL, next operation is Inverse.
  1259. ;;(defvar calc-inverse-flag nil)
  1260. X
  1261. ;; If non-NIL, next operation is Hyperbolic.
  1262. ;;(defvar calc-hyperbolic-flag nil)
  1263. X
  1264. ;; If non-NIL, next operation should not remove its arguments from stack.
  1265. ;;(defvar calc-keep-args-flag nil)
  1266. X
  1267. ;; If deg, angles are in degrees; if rad, angles are in radians.
  1268. ;; If hms, angles are in degrees-minutes-seconds.
  1269. ;;(defvar calc-angle-mode 'deg)
  1270. X
  1271. ;; If non-NIL, numeric entry accepts whole algebraic expressions.
  1272. ;; If NIL, algebraic expressions must be preceded by "'".
  1273. ;;(defvar calc-algebraic-mode nil)
  1274. X
  1275. ;; Like calc-algebraic-mode except only affects ( and [ keys.
  1276. ;;(defvar calc-incomplete-algebraic-mode nil)
  1277. X
  1278. ;; If non-NIL, inexact numeric computations like sqrt(2) are postponed.
  1279. ;; If NIL, computations on numbers always yield numbers where possible.
  1280. ;;(defvar calc-symbolic-mode nil)
  1281. X
  1282. ;; If 'matrix, variables are assumed to be matrix-valued.
  1283. ;; If a number, variables are assumed to be NxN matrices.
  1284. ;; If 'scalar, variables are assumed to be scalar-valued.
  1285. ;; If NIL, symbolic math routines make no assumptions about variables.
  1286. ;;(defvar calc-matrix-mode nil)
  1287. X
  1288. ;; If non-NIL, shifted letter keys are prefix keys rather than normal meanings.
  1289. ;;(defvar calc-shift-prefix nil)
  1290. X
  1291. ;; Initial height of Calculator window.
  1292. ;;(defvar calc-window-height 7)
  1293. X
  1294. ;; If non-NIL, M-x calc creates a window to display Calculator trail.
  1295. ;;(defvar calc-display-trail t)
  1296. X
  1297. ;; If non-NIL, selected sub-formulas are shown by obscuring rest of formula.
  1298. ;; If NIL, selected sub-formulas are highlighted by obscuring the sub-formulas.
  1299. ;;(defvar calc-show-selections t)
  1300. X
  1301. ;; If non-NIL, commands operate only on selected portions of formulas.
  1302. ;; If NIL, selections displayed but ignored.
  1303. ;;(defvar calc-use-selections t)
  1304. X
  1305. ;; If non-NIL, selection hides deep structure of associative formulas.
  1306. ;;(defvar calc-assoc-selections t)
  1307. X
  1308. ;; If non-NIL, display "Working..." for potentially slow Calculator commands.
  1309. ;;(defvar calc-display-working-message 'lots)
  1310. X
  1311. ;; If non-NIL, automatically execute a "why" command to explain odd results.
  1312. ;;(defvar calc-auto-why nil)
  1313. X
  1314. ;; If non-NIL, display timing information on each slow command.
  1315. ;;(defvar calc-timing nil)
  1316. X
  1317. ;; Floating-point numbers with this positive exponent or higher above the
  1318. ;; current precision are displayed in scientific notation in calc-mode.
  1319. (defvar calc-display-sci-high 0)
  1320. X
  1321. ;; Floating-point numbers with this negative exponent or lower are displayed
  1322. ;; scientific notation in calc-mode.
  1323. (defvar calc-display-sci-low -3)
  1324. X
  1325. X
  1326. ;; List of used-defined strings to append to Calculator mode line.
  1327. (defvar calc-other-modes nil)
  1328. X
  1329. ;; List of strings for Y prefix help.
  1330. (defvar calc-Y-help-msgs nil)
  1331. X
  1332. ;; T if calc-settings-file has been loaded yet.
  1333. (defvar calc-loaded-settings-file nil)
  1334. X
  1335. X
  1336. X
  1337. (defconst calc-mode-var-list '((calc-always-load-extensions nil)
  1338. X                   (calc-mode-save-mode local)
  1339. X                   (calc-line-numbering t)
  1340. X                   (calc-line-breaking t)
  1341. X                   (calc-display-just nil)
  1342. X                   (calc-display-origin nil)
  1343. X                   (calc-left-label "")
  1344. X                   (calc-right-label "")
  1345. X                   (calc-number-radix 10)
  1346. X                   (calc-leading-zeros nil)
  1347. X                   (calc-group-digits nil)
  1348. X                   (calc-group-char ",")
  1349. X                   (calc-point-char ".")
  1350. X                   (calc-frac-format (":" nil))
  1351. X                   (calc-prefer-frac nil)
  1352. X                   (calc-hms-format "%s@ %s' %s\"")
  1353. X                   (calc-date-format ((H ":" mm C SS pp " ")
  1354. X                          Www " " Mmm " " D ", " YYYY))
  1355. X                   (calc-standard-date-formats
  1356. X                ("N"
  1357. X                 "<H:mm:SSpp >Www Mmm D, YYYY"
  1358. X                 "D Mmm YYYY<, h:mm:SS>"
  1359. X                 "Www Mmm BD< hh:mm:ss> YYYY"
  1360. X                 "M/D/Y< H:mm:SSpp>"
  1361. X                 "D.M.Y< h:mm:SS>"
  1362. X                 "M-D-Y< H:mm:SSpp>"
  1363. X                 "D-M-Y< h:mm:SS>"
  1364. X                 "j<, h:mm:SS>"
  1365. X                 "YYddd< hh:mm:ss>"))
  1366. X                   (calc-float-format (float 0))
  1367. X                   (calc-full-float-format (float 0))
  1368. X                   (calc-complex-format nil)
  1369. X                   (calc-matrix-just center)
  1370. X                   (calc-full-vectors t)
  1371. X                   (calc-full-trail-vectors t)
  1372. X                   (calc-break-vectors nil)
  1373. X                   (calc-vector-commas ",")
  1374. X                   (calc-vector-brackets "[]")
  1375. X                   (calc-matrix-brackets (R O))
  1376. X                   (calc-complex-mode cplx)
  1377. X                   (calc-infinite-mode nil)
  1378. X                   (calc-display-strings nil)
  1379. X                   (calc-simplify-mode nil)
  1380. X                   (calc-auto-recompute t)
  1381. X                   (calc-word-size 32)
  1382. X                   (calc-previous-modulo nil)
  1383. X                   (calc-display-raw nil)
  1384. X                   (calc-internal-prec 12)
  1385. X                   (calc-angle-mode deg)
  1386. X                   (calc-algebraic-mode nil)
  1387. X                   (calc-incomplete-algebraic-mode nil)
  1388. X                   (calc-symbolic-mode nil)
  1389. X                   (calc-matrix-mode nil)
  1390. X                   (calc-autorange-units nil)
  1391. X                   (calc-shift-prefix nil)
  1392. X                   (calc-window-height 7)
  1393. X                   (calc-was-keypad-mode nil)
  1394. X                   (calc-full-mode nil)
  1395. X                   (calc-language nil)
  1396. X                   (calc-language-option nil)
  1397. X                   (calc-show-selections t)
  1398. X                   (calc-use-selections t)
  1399. X                   (calc-assoc-selections t)
  1400. X                   (calc-display-trail t)
  1401. X                   (calc-display-working-message lots)
  1402. X                   (calc-auto-why 'maybe)
  1403. X                   (calc-timing nil)
  1404. X                   (calc-gnuplot-default-device "default")
  1405. X                   (calc-gnuplot-default-output "STDOUT")
  1406. X                   (calc-gnuplot-print-device "postscript")
  1407. X                   (calc-gnuplot-print-output "auto")
  1408. X                   (calc-gnuplot-geometry nil)
  1409. X                   (calc-graph-default-resolution 15)
  1410. X                   (calc-graph-default-resolution-3d 5)
  1411. X                   (calc-invocation-macro nil)))
  1412. X
  1413. (defconst calc-local-var-list '(calc-stack
  1414. X                calc-stack-top
  1415. X                calc-undo-list
  1416. X                calc-redo-list
  1417. X                calc-always-load-extensions
  1418. X                calc-mode-save-mode
  1419. X                calc-display-raw
  1420. X                calc-line-numbering
  1421. X                calc-line-breaking
  1422. X                calc-display-just
  1423. X                calc-display-origin
  1424. X                calc-left-label
  1425. X                calc-right-label
  1426. X                calc-auto-why
  1427. X                calc-algebraic-mode
  1428. X                calc-incomplete-algebraic-mode
  1429. X                calc-symbolic-mode
  1430. X                calc-matrix-mode
  1431. X                calc-inverse-flag
  1432. X                calc-hyperbolic-flag
  1433. X                calc-keep-args-flag
  1434. X                calc-angle-mode
  1435. X                calc-number-radix
  1436. X                calc-leading-zeros
  1437. X                calc-group-digits
  1438. X                calc-group-char
  1439. X                calc-point-char
  1440. X                calc-frac-format
  1441. X                calc-prefer-frac
  1442. X                calc-hms-format
  1443. X                calc-date-format
  1444. X                calc-standard-date-formats
  1445. X                calc-float-format
  1446. X                calc-full-float-format
  1447. X                calc-complex-format
  1448. X                calc-matrix-just
  1449. X                calc-full-vectors
  1450. X                calc-full-trail-vectors
  1451. X                calc-break-vectors
  1452. X                calc-vector-commas
  1453. X                calc-vector-brackets
  1454. X                calc-matrix-brackets
  1455. X                calc-complex-mode
  1456. X                calc-infinite-mode
  1457. X                calc-display-strings
  1458. X                calc-simplify-mode
  1459. X                calc-auto-recompute
  1460. X                calc-autorange-units
  1461. X                calc-show-plain
  1462. X                calc-show-selections
  1463. X                calc-use-selections
  1464. X                calc-assoc-selections
  1465. X                calc-word-size
  1466. X                calc-internal-prec))
  1467. X
  1468. X
  1469. (defun calc-init-base ()
  1470. X
  1471. X  ;; Set up the standard keystroke (M-#) to run the Calculator, if that key
  1472. X  ;; has not yet been bound to anything.  For best results, the user should
  1473. X  ;; do this before Calc is even loaded, so that M-# can auto-load Calc.
  1474. X  (or (global-key-binding "\e#")
  1475. X      (global-set-key "\e#" 'calc-dispatch))
  1476. X
  1477. X  ;; Set up the autoloading linkage.
  1478. X  (let ((name (and (fboundp 'calc-dispatch)
  1479. X           (eq (car-safe (symbol-function 'calc-dispatch)) 'autoload)
  1480. X           (nth 1 (symbol-function 'calc-dispatch))))
  1481. X    (p load-path))
  1482. X
  1483. X    ;; If Calc files exist on the load-path, we're all set.
  1484. X    (while (and p (not (file-exists-p
  1485. X            (expand-file-name "calc-misc.elc" (car p)))))
  1486. X      (setq p (cdr p)))
  1487. X    (or p
  1488. X
  1489. X    ;; If Calc is autoloaded using a path name, look there for Calc files.
  1490. X    ;; This works for both relative ("calc/calc.elc") and absolute paths.
  1491. X    (and name (file-name-directory name)
  1492. X         (let ((p2 load-path)
  1493. X           (name2 (concat (file-name-directory name)
  1494. X                  "calc-misc.elc")))
  1495. X           (while (and p2 (not (file-exists-p
  1496. X                    (expand-file-name name2 (car p2)))))
  1497. X         (setq p2 (cdr p2)))
  1498. X           (if p2
  1499. X           (setq load-path (nconc load-path
  1500. X                      (list
  1501. X                       (directory-file-name
  1502. X                        (file-name-directory
  1503. X                         (expand-file-name
  1504. X                          name (car p2))))))))))
  1505. X
  1506. X    ;; If calc-autoload-directory is given, use that (and hope it works!).
  1507. X    (and calc-autoload-directory
  1508. X         (not (equal calc-autoload-directory ""))
  1509. X         (setq load-path (nconc load-path
  1510. X                    (list (directory-file-name
  1511. X                       calc-autoload-directory)))))))
  1512. X
  1513. X  ;; The following modes use specially-formatted data.
  1514. X  (put 'calc-mode 'mode-class 'special)
  1515. X  (put 'calc-trail-mode 'mode-class 'special)
  1516. X  
  1517. X  ;; Define "inexact-result" as an e-lisp error symbol.
  1518. X  (put 'inexact-result 'error-conditions '(error inexact-result calc-error))
  1519. SHAR_EOF
  1520. true || echo 'restore of calc.el failed'
  1521. fi
  1522. echo 'End of  part 1'
  1523. echo 'File calc.el is continued in part 2'
  1524. echo 2 > _shar_seq_.tmp
  1525. exit 0
  1526. exit 0 # Just in case...
  1527. -- 
  1528. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1529. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1530. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1531. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1532.